Processors, such as graphics processing units (GPUs), have been developed to assist in the expedient display of computer generated images and video. Typically, a two-dimensional (2D) and/or three-dimensional (3D) engine associated with a processor may render images and video as data (i.e., pixel data) that are stored in frame buffers of system memory, typically in an RGB (red/green/blue) format. A display controller in the processor may be used to retrieve the image/video frame data and process the data in a selected manner to provide a desired type of video signal output. Where applicable, the display controller may also retrieve and process related audio and cursor control data in connection with the image/video frame data.
A pixel is generally thought of as the smallest single component of a digital image. The more pixels used to represent an image, the closer the result can resemble the original. The number of pixels in an image is sometimes referred to as the resolution. Pixel counts may be expressed as a single number, as in a “three-megapixel” digital camera that nominally has three million pixels. Pixel counts may also be expressed as a pair of numbers, such as in a 640×480 display, which has 640 pixels from side-to-side and 480 pixels from top-to-bottom, and therefore has a total number of 640×480=307,200 pixels or approximately 0.3 megapixels.
YUV is a standard color encoding system used for analog television (TV) worldwide. The YUV color space (color model) differs from RGB formats that typical cameras capture. The “Y” in YUV stands for “luma,” which is brightness, or lightness; the “U” and “V” stand for “chrominance” or color. Black and white TVs decode only the Y part of a YUV signal.
Chrominance, (i.e., chroma), is the signal used in video systems to convey the color information of the picture, separately from the accompanying luma (Y) signal. Chroma is usually represented as two color-difference components: U=B′−Y′ (blue−luma) and V=R′−Y′ (red−luma). Each of these difference components may have scale factors and offsets applied to it, as specified by the applicable video standard. The “U” and “V” provide color information and are “color difference” signals of blue minus luma (B−Y) and red minus luma (R−Y). Through a process called “color space conversion,” a video camera may be configured to convert RGB data captured by its sensors into either composite analog signals (YUV) or component versions (analog YPbPr or digital YCbCr). For rendering on screen, these color spaces are typically converted back to RGB by the TV or other display.
A macroblock (MB) is a unit of pixels typically used in image compression. The sizes of MBs are expressed as actual image sizes, typically in the notation W×H, denoting width and height. Color information is usually encoded at a lower resolution than the luminance information. For example, in 4:2:0 subsampled YUV, U and V components are each subsampled at a factor of 2 horizontally and vertically. When encoding such content, a luma MB may be proportionally larger than a chroma MB.
Typically, a processor will have multiple types of standard display outputs. Current standard types of outputs include digital-to-analog converter (DAC) outputs used to drive many commercially available types of cathode ray tube (CRT) monitors/panels/projectors via an analog video graphics array (VGA) cable, digital visual interface (DVI) outputs used to provide very high visual quality on many commercially available digital display devices, such as flat panel displays, and high-definition multimedia interface (HDMI) outputs used as a compact audio/video interface for uncompressed digital data for many high-definition televisions and the like. A display controller that has multiple modes may support standard conventional functions of cursor compositing, image rescaling, color space conversion, gamma control and the like for wired display interfaces.
Additionally, processors may have multiple, (e.g., two, four or six), display controllers in order to concurrently drive multiple display outputs to concurrently display the same and/or different images or video on different display devices. Typically, the display controllers are associated with the processor's outputs in a multiplexed configuration such that any one of the display controllers can be directed to drive any of the processor's outputs.
Although many devices have built in displays or direct cable connections for display devices, there are expanding applications for sending display outputs from video or graphics sources to remote locations over wired or wireless networks. In lieu of transmitting standard uncompressed display data, network bandwidth constraints have led to data compression transmission requirements that are required to be applied to a display data stream for remote display.
A variety of devices have been developed to convert the various types of standard graphic outputs for sending display outputs from video or graphics sources to remote locations over wired or wireless networks. A wireless or wired display typically involves video data compression, which is usually MB-based, (e.g., 16×16 pixels), while the video data is raster-based, (e.g., 1 line at a time). An entire MB row, (e.g., 16 lines), may have to be buffered before the first MB compression may take place. As used herein, video data includes data of individual images.
Typically, double buffering of video data, (e.g., 32-lines), is implemented so that while the video compression engine is operating one 16-line MB row, the other 16-line MB row is buffered. Thus, for example, 32 total lines of memory may be used, separated into two partitions of sixteen (16) lines.
The implementation of double buffering is expensive and can quickly exhausts memory capacity. For example, 32 lines of 1920 pixels of video data, where each pixel is 3 bytes, require over 180 kilobytes of memory. By using a 16-line MB buffering scheme, a 50% reduction in video data memory usage would result.